use std::{io, ops::Add};

pub fn basic_type() {
    let mut a = "fasdf".to_string();
    clear(&mut a);
    // println!("basic_type,{:?}结果", a);
    // println!("basic_type,{:?}", clear(&mut a));
}
fn clear(text: &mut String) -> () {
    *text = String::from("");
    //     *text：这里的 * 是解引用操作符，用于获取 text 引用所指向的实际 String 值。
    // String::from("")：创建一个新的空 String 对象。
    // *text = String::from("");：将 text 引用所指向的 String 对象设置为空字符串。
}
// ==================所有权you xian==================
#[derive(Debug)]
struct Rectangle {
    width: u32,
    height: u32,
}



#[derive(Debug)]
struct Point<T: Add<T, Output = T>> { //限制类型T必须实现了Add特征，否则无法进行+操作。
    x: T,
    y: T,
}

impl<T: Add<T, Output = T>> Add for Point<T> {
    type Output = Point<T>;

    fn add(self, p: Point<T>) -> Point<T> {
        Point{
            x: self.x + p.x,
            y: self.y + p.y,
        }
    }
}

fn add<T: Add<T, Output=T>>(a:T, b:T) -> T {
    a + b
}

pub fn suo_you_quan() {
    let p1 = Point{x: 1.1f32, y: 1.1f32};
    let p2 = Point{x: 2.1f32, y: 2.1f32};
    println!("{:?}", add(p1, p2));

}

fn first_word(s: &String) -> &str {
    &s[..1]
}
